

/**
  * 格式化日期时间字符串
  * @param {string} dateStr - 原始日期时间字符串
  * @param {string} format - 输出格式模板字符串
  * @returns {string} - 格式化后的日期时间字符串
  */
function formatDate(dateStr, format) {
  // 尝试用 Date 对象解析日期字符串
  let date = new Date(dateStr);

  // 检查解析是否成功，如果失败则返回原始字符串
  if (isNaN(date.getTime())) {
    console.error('无效的日期字符串:', dateStr);
    return dateStr;
  }

  // 占位符和对应值的映射
  const o = {
    'M+': date.getMonth() + 1, // 月份
    'D+': date.getDate(), // 日
    'H+': date.getHours(), // 小时
    'm+': date.getMinutes(), // 分
    's+': date.getSeconds(), // 秒
    'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
    'S': date.getMilliseconds() // 毫秒
  };

  // 处理年份占位符 'YYYY'
  if (/(Y+)/.test(format)) {
    format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
  }

  // 替换其他占位符
  for (let k in o) {
    if (new RegExp('(' + k + ')').test(format)) {
      format = format.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));
    }
  }

  return format;
}


// 示例 1: 转换 "2025/08/20 10:00:00"
const date0 = '2025/08/20 10:00:00';
const formattedDate0 = formatDate(date0, 'YYYY年MM月DD日 HH时mm分');
console.log(formattedDate0); // 输出: 2025年08月20日 10时00分
const date1 = '2025-09-11T05:03:10Z';
const formattedDate1 = formatDate(date1, 'YYYY/MM/DD HH:mm');
console.log(formattedDate1); // 输出: 2025年08月20日 10时00分

// 示例 2: 转换 "2025-08-20T10:00:00Z" (ISO 格式)
const date2 = '2025-08-20T10:00:00Z';
const formattedDate2 = formatDate(date2, 'MM-DD-YYYY');
console.log(formattedDate2); // 输出: 08-20-2025

// 示例 3: 转换 "August 20, 2025"
const date3 = 'August 20, 2025';
const formattedDate3 = formatDate(date3, 'DD/MM/YYYY');
console.log(formattedDate3); // 输出: 20/08/2025

// 示例 4: 仅显示年份和月份
const date4 = '2025-08-20';
const formattedDate4 = formatDate(date4, 'YYYY-MM');
console.log(formattedDate4); // 输出: 2025-08
